/*
 * @Author: CemCode cemoment@aliyun.com
 * @Date: 2022-04-13 16:57:25
 * @LastEditors: CemCode cemoment@aliyun.com
 * @LastEditTime: 2022-07-10 14:36:44
 * @FilePath: \vue-blog-2\src\utils\request.js
 * @Description: 
 * 
 * Copyright (c) 2022 by CemCode cemoment@aliyun.com, All Rights Reserved. 
 */
//封装 axios 的获取
/*
1. 封装了 baseURL 根路径 网址
2. 封装了 获取数据的过期时间
3. 封装了 请求拦截和响应
4. 封装了 数据获取到之前的旋转小图标
5. 数据如果没有获取到的报错信息
*/
//引入vue

//1. 引入axios
import axios from 'axios';
import {
    Message,
    // Loading
} from 'element-ui';
import store from '@/store'
import NProgress from 'nprogress';

const service = axios.create({
    baseURL: process.env.VUE_APP_API_URL,
    timeout: 60 * 1000
})

// 操控获取状态的变量
// let loadObj = null

// 请求拦截
service.interceptors.request.use(
    config => {
        //假设有 token ， 需要设置 token令牌
        // 设置token
        config.headers['Authorization'] = store.getters.token;
        // if (!loadObj) {
        //     loadObj = Loading.service({
        //         lock: true,
        //         target: "#loading",
        //         text: "请求中...",
        //         spinner: "el-icon-loading",
        //         background: "rgba(0,0,0,0.5)"
        //     })
        // }
        NProgress.start()
        return config;
    },
    error => {
        //表示错误返回
        return Promise.reject(error);
    });

//响应拦截
service.interceptors.response.use(
    response => {
        // Vue.nextTick(() => {
        //     loadObj.close()
        // })
        NProgress.done()
        if (response.data.status === 1) {
            Message({
                message: response.data.msg,
                type: "error"
            })
            if (response.data.msg === "身份认证失败!") {
                store.dispatch('LoginOutAction')
                window.location.href = "/#/admin/login"
            }
            return Promise.reject(response.data.msg)
        } else {
            return response.data;
        }
    },
    error => {
        //对响应错误做些什么
        // Vue.nextTick(() => {
        //     loadObj.close()
        // })
        NProgress.done()
        Message({
            message: error,
            type: "error"
        })
        return Promise.reject(error);
    });

//输出
export default service;